<template>
  <section>工厂模式</section>
</template>

<script>
/**
 * @Description:工厂模式
 * @author ZY
 * @date 2022/11/23 22:41
 */
export default {
  name: "DesignFactory",
  data() {
    return {}
  },
  created() {
    console.log('*******工厂模式开始********')
    this.main()
    console.log('*******工厂模式结束********')
  },
  methods: {
    /*
    * 工厂模式定义一个用于创建对象的接口，这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。
    * 如果你不想让某个子系统与较大的那个对象之间形成强耦合，而是想运行时从许多子系统中进行挑选的话，那么工厂模式是一个理想的选择将new操作简单封装，遇到new的时候就应该考虑是否用工厂模式；
      需要依赖具体环境创建不同实例，这些实例都有相同的行为,这时候我们可以使用工厂模式，简化实现的过程，同时也可以减少每种对象所需的代码量，有利于消除对象间的耦合，提供更大的灵活性
    * */
    main() {
      class Product {
        constructor(name) {
          this.name = name
        }

        init() {
          console.log('init')
        }

        fun() {
          console.log('fun')
        }
      }

      class Factory {
        create(name) {
          return new Product(name)
        }
      }

      // use
      let factory = new Factory()
      let p = factory.create('p1')
      p.init()
      p.fun()
    }
  }
}
</script>

<style scoped>

</style>
